/*
 * Copyright (c) 2019. ascend 版权所有禁止转载。
 */

package cn.edu.zua.demo14.controller;

import com.querydsl.core.types.Predicate;
import com.querydsl.core.types.dsl.BooleanExpression;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * 说明：
 *
 * @author ascend
 * 2019/1/28 16:14
 */
public class InQuirer {
    /**
     * 查询条件集合
     */
    private List<BooleanExpression> expressionList;


    public InQuirer() {
        this.expressionList = new ArrayList<>();
    }

    /**
     * 添加查询条件到Query内的查询集合内
     * @param expression 查询条件继承BooleanExpression抽象对象的具体实体对象,querydsl已经封装
     */
    public InQuirer putExpression(BooleanExpression expression) {
        expressionList.add(expression);
        return this;
    }

    /**
     * 构建出查询findAll函数使用的Predicate接口查询对象<br>
     * 调用buildQuery()可直接作为findAll参数查询条件使用
     */
    public Predicate buildQuery() {
        // 第一个查询条件对象
        BooleanExpression be = null;
        for (int i = 0; i < expressionList.size(); i++) {
            if (i == 0) {
                be = expressionList.get(i);
            }else {
                be = be.and(expressionList.get(i));
            }
        }
        return be;
    }

    /**
     * 将Iterable集合转换成ArrayList集合
     * @param iterable 源集合
     * @param <T> 类型
     * @return arrayList结果
     */
    public <T> List<T> iteratorToList(Iterable<T> iterable) {
        List<T> returnList = new ArrayList<>();
        for (T item : iterable) {
            returnList.add(item);
        }
        return returnList;
    }
}
